---
title:  POST /gemfire-api/v1/functions/{functionId}
---

<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

Execute Geode function on entire cluster or on a specified region, members and member groups.

## Resource URL

``` pre
/gemfire-api/v1/functions/{functionId}?[&onRegion=regionname|&onMembers=member1,member2,...,memberN|&onGroups=group1,group2,...,groupN]
```

## Parameters

-   **{functionId}** This required parameter is the name of the function to execute. Place it in the Resource URL, as in the example request: `AddFreeItemToOrders`.
-   **onRegion** This optional parameter specifies the target region for the function. You can only invoke a function on a single region. Substitute the region's name for `regionname` within the sample syntax `onRegion=regionname`.
-   **onMembers** This optional parameter specifies the target members of the function. For multiple members, specify a comma-delimited list of member names, as in the sample `onMembers=member1,member2`.
-   **onGroups** This optional parameter specifies the target groups of the function. For multiple groups, specify a comma-delimited list of group names, as in the sample `onGroups=membergroup1,membergroup2`.
-   **filter** This optional parameter can only be used with the **onRegion** parameter, where the region has a `data-policy` of `PARTITION`. The parameter specifies a list of applicable keys that the function needs to filter on. There are 3 keys in the example Resource URL:

    ``` pre
    http://serverURL/functions/SampleFunction?onRegion=TestPartitionRegion&filter=key1,key2,key3
    ```

-   Any *function arguments* are passed in the request body in JSON format. The content of the arguments can depend on how the function is defined. Use @type to declare argument types and @value for specifying a scalar value. An example set of arguments:

    ``` pre
    [
            {
                 "@type":  "double",
                 "@value": 210
            },
            {
                 "@type":  "org.apache.geode.web.rest.domain.Item",
                 "itemNo":  "599",
                 "description":  "Part X Free on Bumper Offer",
                 "quantity":  "2",
                 "unitprice":  "5",
                 "totalprice":  "10.00"
            }
    ]
    ```

## Example Requests

``` pre
Request Payload: application/json
POST /gemfire-api/v1/functions/AddFreeItemToOrders
Accept: application/json
Content-Type: application/json

[
        {
             "@type":  "double",
             "@value": 210
        },
        {
             "@type":  "org.apache.geode.web.rest.domain.Item",
             "itemNo":  "599",
             "description":  "Part X Free on Bumper Offer",
             "quantity":  "2",
             "unitprice":  "5",
             "totalprice":  "10.00"
        }
]
```

Another example:

``` pre
Request Payload: null

POST /gemfire-api/v1/functions/getDeliveredOrders
Accept: application/json
```

## Example Success Responses

``` pre
Response Payload: null
200 OK
Location:http: //localhost:8080/gemfire-api/v1/functions/AddFreeItemToOrders
```

Another example response:

``` pre
Response Payload: application/json

200 OK
Content-Length: 316
Content-Type: application/json
Location: http://localhost:8080/gemfire-api/v1/functions/getDeliveredOrders
[
    {
         "purchaseOrderNo":  "1121",
         "deliveryDate":  "Thu Feb 20 00:00:00 IST 2014"
    },
    {
         "purchaseOrderNo":  "777",
         "deliveryDate":  "Thu Feb 20 00:00:00 IST 2014"
    },
    {
        ...
    }
]
```

## Error Codes

Status code 500 INTERNAL SERVER ERROR is an error encountered in a server. Check the HTTP response body for a stack trace of the exception. Causes:

-   The Region identified by name (%1$s) could not found!
-   Could not found the specified members in disributed system!
-   no member(s) are found belonging to the provided group(s)!
-   Disributed system does not contain any valid data node to run the specified function!
-   Key is of an inappropriate type for this region!
-   Specified key is null and this region does not permit null keys!
-   Server has encountered low memory condition!
-   Input parameter is null!
-   Could not convert function results into Restful (JSON) format!
-   Function has returned results that could not be converted into Restful (JSON) format!
-   Server has encountered an error while processing function execution!


